package cn.xkai.exercise.a;

/**
 * @description: 寻找数组的中心索引
 * 自己的思路：由于是无序数组，直接从0循环计算彼此相对当前位置的数据差
 * 借鉴的思路：计算出总数，然后循环计算左边的数据和，用总数减去当前点的数据，然后等于2倍的左边数据和，即当前点为中心索引
 * 心得：自己的思路多进行了循环比较，借鉴的思路先计算出总数再直接计算
 * @author: kaixiang
 * @date: 2022-06-17
 **/
class Solution2 {
    public int pivotIndex(int[] nums) {
        if (nums.length == 1) {
            return nums[0];
        }
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum = 0;
            for (int j = 1; j < nums.length; j++) {
                if (i - j >= 0) {
                    sum += nums[i - j];
                }
                if (i + j < nums.length) {
                    sum -= nums[i + j];
                }
            }
            if (sum == 0) {
                return i;
            }
        }
        return -1;
    }

    public int pivotIndexRefer(int[] nums) {
        int sum = 0, flag = 0, end = 0;
        //sum为数组中所有元素的总和
        for (int num : nums) {
            sum += num;
        }
        //如果除了nums[0]以外的和为0，即0为数组的中心索引
        if (sum - nums[0] == 0) {
            return 0;
        }
        //flag为数组中从索引为0的位置到索引为j的位置的所有元素的和
        for (int j = 0; j < nums.length; j++) {
            flag += nums[j];
            if (j != 0) {
                //end为数组中从索引为0的位置到索引为j-1的位置的所有元素的和
                end = flag - nums[j];
            }
            //数组中索引为j的位置前的所有元素总和
            if (end == sum - flag) {
                //与数组中索引位置为j的位置后的所有元素总和相等
                return j;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] nums = {1, 7, 3, 6, 5, 6};
        Solution2 solution2 = new Solution2();
        System.out.println(solution2.pivotIndex(nums));
    }
}
